home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 1.iso / toolbox / src / tutorials / custEducation / opengl2 / demos / oglextensions.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-11-11  |  4.4 KB  |  196 lines

  1. /* Copyright (c) Silcon Graphics, Inc. 1995 */
  2.  
  3. /* oglextensions.c
  4.  * Prints out the GL, GLX and GLU extensions available
  5.  * on the local machine.
  6.  *
  7.  *    Usage: oglextensions [-display <display>]
  8.  */
  9. #include <GL/glx.h>
  10. #include <GL/gl.h>
  11. #include <GL/glu.h>
  12. #include <stdio.h>
  13. #include <string.h>
  14.  
  15. int visual_request[] = { None }; /* don't need much of a visual */
  16.  
  17. int
  18. main(int argc, char **argv)
  19. {
  20.     char *display_name = NULL;
  21.     const GLubyte *string;
  22.     Display       *dpy;
  23.     int           screen_num;
  24.     int           major, minor;
  25.     int           dontcare; /* for returned arguments we don't care about */
  26.     XVisualInfo   *vis;
  27.     GLXContext    ctx;
  28.     Window        root,  win;
  29.     Colormap      cmap;
  30.     XSetWindowAttributes swa;
  31.     XEvent        event;
  32.  
  33.     /* parse arguments */
  34.     if (argc > 1) {
  35.         if(!strcmp(argv[1],"-display"))
  36.             display_name = argv[2];
  37.         else {
  38.             fprintf(stderr, "Usage: %s [-display <display>]\n",
  39.                 argv[0]);
  40.             return -1;
  41.         }
  42.     }
  43.  
  44.     /* get display */
  45.     if (!(dpy = XOpenDisplay(display_name))) {
  46.         fprintf(stderr,"Error: XOpenDisplay() failed.\n");
  47.         return -1;
  48.     }
  49.  
  50.     /* does the server know about OpenGL & GLX? */
  51.     if(!XQueryExtension(dpy, "GLX", &dontcare, &dontcare, &dontcare)) {
  52.         fprintf(stderr,
  53.             "This system does not appear to support OpenGL\n");
  54.         return -1;
  55.     }
  56.  
  57.  
  58.     /* find the glx version */
  59.     if(glXQueryVersion(dpy, &major, &minor))
  60.         printf("GLX Version: %d.%d\n", major, minor);
  61.     else {
  62.         fprintf(stderr, "Error: glXQueryVersion() failed.\n");
  63.         return -1;
  64.     }
  65.  
  66.     /* get screen number */
  67.     screen_num = DefaultScreen(dpy);
  68.  
  69.     /* This #ifdef isn't redundant. It keeps the build from breaking
  70.     ** if you are building on a machine that has an old (1.0) version
  71.     ** of glx.
  72.     **
  73.     ** This program could still be *run* on a machine that has an old 
  74.     ** version of glx, even if it was *compiled* on a version that has
  75.     ** a new version.
  76.     **
  77.     ** If compiled on a system with an old version of glx, then it will 
  78.     ** never recognize glx extensions, since that code would have been
  79.     ** #ifdef'ed out.
  80.     */
  81. #ifdef GLX_VERSION_1_1
  82.  
  83.     /*
  84.     ** This test guarantees that glx, on the display you are inquiring,
  85.     ** suppports glXQueryExtensionsString().
  86.     */
  87.     if(minor > 0 || major > 1)
  88.         string = glXQueryExtensionsString(dpy, screen_num);
  89.     else
  90.         string = "";
  91.  
  92.     if(string)
  93.         printf("GLX Extensions (client & server): %s\n\n",
  94.             string);
  95.     else {
  96.         fprintf(stderr, "Error: glXQueryExtensionsString() failed.\n");
  97.         return -1;
  98.     }
  99.  
  100. #endif
  101.  
  102.     /* get any valid OpenGL visual */
  103.     if (!(vis = glXChooseVisual(dpy, screen_num, visual_request)))  {
  104.         fprintf(stderr,"Error: glXChooseVisual() failed.\n");
  105.         return -1;
  106.     }
  107.  
  108.     /* get context */
  109.     ctx = glXCreateContext(dpy,vis,0,GL_TRUE);
  110.  
  111.     /* root window */
  112.     root = RootWindow(dpy,vis->screen);
  113.  
  114.     /* get RGBA colormap */
  115.     cmap = XCreateColormap(dpy, root, vis->visual, AllocNone);
  116.  
  117.     /* get window */
  118.     swa.colormap = cmap;
  119.     swa.border_pixel = 0;
  120.     swa.event_mask = StructureNotifyMask;
  121.     win = XCreateWindow(dpy, root, 0, 0, 1, 1, 0, vis->depth,
  122.                 InputOutput,vis->visual,
  123.                 CWBorderPixel|CWColormap|CWEventMask,
  124.                 &swa);
  125.  
  126.     glXMakeCurrent(dpy,win,ctx);
  127.  
  128.     string = glGetString(GL_VERSION);
  129.     if(string)
  130.         printf("OpenGL Version: %s\n", string);
  131.     else {
  132.         fprintf(stderr, "Error: glGetString(GL_VERSION) failed.\n");
  133.         return -1;
  134.     }
  135.  
  136.     string = glGetString(GL_RENDERER);
  137.  
  138.     if(string)
  139.         printf("OpenGL Renderer: %s\n", string);
  140.     else {
  141.         fprintf(stderr, "Error: glGetString(GL_RENDERER) failed.\n");
  142.         return -1;
  143.     }
  144.  
  145.     string = glGetString(GL_EXTENSIONS);
  146.  
  147.     if(string)
  148.         printf("OpenGL Extensions: %s\n\n", string);
  149.     else {
  150.         fprintf(stderr, "Error: glGetString(GL_EXTENSIONS) failed.\n");
  151.         return -1;
  152.     }
  153.  
  154.     /*
  155.     ** This #ifdef prevents a build failure if you compile on an a
  156.     ** machine with an old GLU library. 
  157.     **
  158.     ** If you build on a pre GLU 1.1 machine, you will never be able
  159.     ** to get glu info, even if you run on a GLU 1.1 or latter machine,
  160.     ** since the code has been #ifdef'ed out.
  161.     */
  162.  
  163. #ifdef GLU_VERSION_1_1
  164.  
  165.     /*
  166.     ** If the glx version is 1.1 or latter, gluGetString() is guaranteed
  167.     ** to exist.
  168.     */
  169.     if(minor > 0 || major > 1)
  170.         string = gluGetString(GLU_VERSION);
  171.     else
  172.         string = "1.0";
  173.  
  174.     if(string)
  175.         printf("GLU Version: %s\n", string);
  176.     else {
  177.         fprintf(stderr, "Error: gluGetString(GLU_VERSION) failed.\n");
  178.         return -1;
  179.     }
  180.  
  181.     if(minor > 0 || major > 1)
  182.         string = gluGetString(GLU_EXTENSIONS);
  183.     else
  184.         string = "";
  185.  
  186.     if(string)
  187.         printf("GLU Extensions: %s\n\n", string);
  188.     else {
  189.         fprintf(stderr, 
  190.             "Error: gluGetString(GLU_EXTENSIONS) failed.\n");
  191.         return -1;
  192.     }
  193. #endif
  194.     return 0;
  195. }
  196.